/* 
 * File:   newsimpletest.cpp
 * Author: max
 *
 * Created on Nov 1, 2012, 9:48:11 PM
 */

#include <stdlib.h>
#include <exception>
#include <iostream>
#include "Mundo.h"
#include "Nivel.h"

using namespace TP::Juego::Arena;

/*
 * Simple C++ Test Suite
 */

void test1() {
    std::cout << "Test 1: Agregar 3 niveles al mundo y accesarlos." << std::endl;

    Mundo miMundo;
	miMundo.setNombre("Tierra media");
	
    try
    {
        miMundo.crearNivel(1, 800, 600, 60, "IMAGEN_FONDO");
        miMundo.crearNivel(2, 1024, 768, 600, "IMAGEN_FONDO");
        miMundo.crearNivel(3, 900, 680, 300, "IMAGEN_FONDO");

        if (NULL == miMundo.getNivel(1))
            throw "No se puede acceder al nivel 1.";
        
        if (NULL == miMundo.getNivel(2))
            throw "No se puede acceder al nivel 2.";
        
        if (NULL == miMundo.getNivel(3))
            throw "No se puede acceder al nivel 3.";
        
    }
    catch (char* pEx)
    {
        std::cout << "%TEST_FAILED% time=0 testname=test1 (newsimpletest) message=" << pEx << std::endl;        
    }
    
}

void test2() {
    std::cout << "Test 2: Acceder a un mundo por referencia." << std::endl;

    Mundo miMundo;
	miMundo.setNombre("Tierra media");
    
    try
    {
        const Nivel* lothLorien = NULL;
        miMundo.crearNivel(1, 800, 600, 60, "IMAGEN_FONDO");
        lothLorien = miMundo.getNivel(1);
		
        if (NULL == lothLorien)
            throw 1;
    }
    catch (int pEx)
    {
        std::cout << "%TEST_FAILED% time=0 testname=test2 (newsimpletest) message= No se puede acceder al nivel por referencia." << std::endl;        
    }
}

int main(int argc, char** argv) {
    std::cout << "%SUITE_STARTING% newsimpletest" << std::endl;
    std::cout << "%SUITE_STARTED%" << std::endl;

   std::cout << "%TEST_STARTED% test1 (newsimpletest)" << std::endl;
    test1();
    std::cout << "%TEST_FINISHED% time=0 test1 (newsimpletest)" << std::endl;

    std::cout << "%TEST_STARTED% test2 (newsimpletest)\n" << std::endl;
    test2();
    std::cout << "%TEST_FINISHED% time=0 test2 (newsimpletest)" << std::endl;

    std::cout << "%SUITE_FINISHED% time=0" << std::endl;

    return (EXIT_SUCCESS);
}

